class Solution {
    public static int totalFruit(int[] fruits) {
        int left = 0;
        int right = 0;
        int count = 0; // 记录水果种类
        int[] hash = new int[100000];
        int len = 0;
        while (right < fruits.length) {
            // 判断这个水果是不是可以用篮子装的新水果
            if (count == 2 && hash[fruits[right]] == 0) {
                // 先记录
                len = Math.max(len, right-left); // right此时不符合要求
                // 得去掉一种水果，然后继续遍历
                while (count == 2) {
                    if (hash[fruits[left]] == 1) { // 只剩下一个水果了
                        hash[fruits[left]] = 0;
                        count--; // 种类得减少
                    } else {
                        hash[fruits[left]]--;
                    }
                    left++;
                }
            } else {
                if (hash[fruits[right]] == 0) { //新水果
                    count++;
                    hash[fruits[right]]++;
                } else {
                    hash[fruits[right]]++;
                }
                right++;
            }
        }
        len = Math.max(len, right-left); // right此时也是非法位置
        return len;
    }

    public static void main(String[] args) {
        int[] fruits = {14,14,1,1,14,5,14,1,14,1,5,5,1,24,7,7,8,7,7,12,12,8,23,8,23,8,20,10,0,17};
        totalFruit(fruits);
    }
}